package gbench.appdemo.myworld.economy.society;

import java.text.MessageFormat;
import java.time.LocalDate;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.BiConsumer;

import gbench.appdemo.myworld.economy.demand.Demand;
import gbench.appdemo.myworld.economy.demand.IDemand;
import gbench.appdemo.myworld.economy.strategy.IBehaviorModel;
import lombok.Data;

/**
 * 个人
 * @author gbench
 *
 */
@Data
public class Individual {
    
    /**
     * 
     */
    public Individual(String name) {
        this.name = name;
    }
    
    /**
     * 表达需求:提出一个自己的需求，类似的问题就是 你有梦想吗
     * @param cs 需求设计函数
     * @return 发布一个任人需求
     */
    public Demand getDemand(BiConsumer<Demand,Individual>cs) {
        final var demand = new Demand();
        if(cs!=null) {
            cs.accept(demand, this);
        }
        this.demandStatus.put(demand, false);
        return demand;
    }
    
    /**
     * 
     * @param demand
     */
    public void closeDemand(Demand demand) {
        demandStatus.computeIfPresent(demand, (k,v)->{
            return true;
        });
    }
    
    /**
     * 格式化输出
     */
    public String toString() {
        return MessageFormat.format("{0}", this.getName());
    }
    
    public String id = ""+ai.getAndIncrement(); // 身份证号
    private String name; // 身份证姓名
    private String address; //住址
    private String sex; //住址
    private LocalDate birth; // 出生日期
    private IBehaviorModel behaviorModel; // 行为模型
    private Map<IDemand,Boolean> demandStatus = new LinkedHashMap<IDemand,Boolean>();
    
    public static AtomicLong ai = new AtomicLong();
}
